/**
 * @author: sundx
 * @date: 2020-05-12 07:40:12
 * @Last Modified by: sundx
 * @Last Modified time: 2020-05-12 07:40:33
 */
#ifndef __HTTP_SERVER__
#define __HTTP_SERVER__
#include "tcp_server_test.h"
enum CHECK_STATE
{
  CHECK_REQUEST_LINE = 0, // 分析请求行
  CHECK_HEADERS           //分析头部字段
};
enum LINE_STATE
{
  LINE_OK = 0, //读取到一个完整行
  LINE_BAD,    // 行出错
  LINE_OPEN    // 继续读取
};
enum HTTP_CODE
{
  NO_REQUEST,        //表示请求不完整，需要读取客户数据;
  GET_REQUEST,       //表示获得了一个完整的客户请求;
  BAD_REQUEST,       //表示客户请求有语法错误;
  FORBIDDEN_REQUEST, //表示客户对资源没有足够的访问权限
  INTERNAL_ERROR,    //表示服务器内部错误;
  CLOSED_CONNECTION  //表示客户端已经关闭连接。
};
namespace sdx
{
  class HttpServer : public TcpServer
  {
  public:
    HttpServer();
    ~HttpServer();

  private:
    const char *reply2client[2] = {"I have got a correct result\n",
                                   "something wrong...\n"};
    char httpClientBuff[MESSAGE_SIZE];

  public:
    LINE_STATE parseLine(char *, int &, int &);         //分析行
    HTTP_CODE parseRequesetLine(char *, CHECK_STATE &); // 分析请求行
    HTTP_CODE parseHeaders(char *);                     //分析头部字段
    HTTP_CODE parseContent(char *, int &, CHECK_STATE &, int &,
                           int &); //分析客户端发送过来的内容
    void replyContent();           // 整合分析并回复
  };
} // namespace sdx
#endif